package mythread;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/4/13 19:48
 * Callable使用
 */
public class ThreadDemo01 {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 创建任务, 返回值是 Integer
        Callable<Integer> callable = () -> {
            // 返回 1 到 1000 的和
            int sum = 0;
            for (int i = 1; i <= 1000; i++) {
                sum += i;
            }
            return sum;
        };
        // 将 callable 任务进行包装, 可以理解成任务清单
        FutureTask<Integer> integerFutureTask = new FutureTask<Integer>(callable);
        // 创建一个线程, 执行清单上的任务
        Thread thread = new Thread(integerFutureTask);
        // 启动线程
        thread.start();
        // 获取返回值
        // get() 会阻塞等待, 来保证 thread 线程执行完后来获取结果, 因此不需要 join()
        System.out.println(integerFutureTask.get());
    }
}
